home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-02-18 | 65.5 KB | 1,464 lines |
- ; 0001 0 MODULE KERSYS (IDENT = '3.3.113',
- ; 0002 0 ADDRESSING_MODE(EXTERNAL = GENERAL, NONEXTERNAL = GENERAL)
- ; 0003 0 ) =
- ; 0004 1 BEGIN
- ; 0005 1
- ; 0006 1 !++
- ; 0007 1 ! FACILITY:
- ; 0008 1 ! KERMIT-32
- ; 0009 1 !
- ; 0010 1 ! ABSTRACT:
- ; 0011 1 ! KERMIT-32 is an implementation of the KERMIT protocal to allow the
- ; 0012 1 ! transfer of files from micro computers to the DECsystem-10, DECSYSTEM-20
- ; 0013 1 ! and now the VAX/VMS systems.
- ; 0014 1 !
- ; 0015 1 ! ENVIRONMENT:
- ; 0016 1 ! User mode
- ; 0017 1 !
- ; 0018 1 ! AUTHOR: Robert C. McQueen, Nick Bush, CREATION DATE: 24-January-1983
- ; 0019 1 !
- ; 0020 1 ! MODIFIED BY:
- ; 0021 1 !
- ; 0022 1 !--
- ; 0023 1
- ; 0024 1 %SBTTL 'Table of Contents'
- ; 0025 1 %SBTTL 'Revision History'
- ; 0026 1
- ; 0027 1 !++
- ; 0028 1 !
- ; 0029 1 ! 2.0.032 By: Nick Bush On: 25-Feb-1984
- ; 0030 1 ! Add code for LOCAL and REMOTE commands. These depend
- ; 0031 1 ! upon support in KERMSG and KERSYS.
- ; 0032 1 !
- ; 0033 1 ! 3.0.045 Start of version 3.
- ; 0034 1 !
- ; 0035 1 ! 3.1.057 By: Nick Bush On: 21-Feb-1985
- ; 0036 1 ! Determine VMS version on startup and remember for later
- ; 0037 1 ! use. Use it in KERSYS to determine whether we will need
- ; 0038 1 ! to force an end-of-file on the mailbox when the subprocess
- ; 0039 1 ! on the other end goes away.
- ; 0040 1 !
- ; 0041 1 ! 3.1.064 By: Nick Bush On: 30-March-1985
- ; 0042 1 ! Fix LIB$SPAWN call to set SYS$INPUT for the subprocess
- ; 0043 1 ! to be NLA0: so that it doesn't try to input from the
- ; 0044 1 ! terminal.
- ; 0045 1 !
- ; 0046 1 ! 3.1.066 By: Nick Bush On: 22-April-1985
- ; 0047 1 ! Don't use NLA0: as SYS$INPUT when spawning things under VMS 3.
- ; 0048 1 !
- ; 0049 1 ! Start of version 3.3
- ; 0050 1 !
- ; 0051 1 ! 3.3.101 By: Robert McQueen On: 2-July-1986
- ; 0052 1 ! Change from $TRNLOG system service calls to LIB$SYS_TRNLOG
- ; 0053 1 ! library routine calls.
- ; 0054 1 !
- ; 0055 1 ! 3.3.108 By: Antonino N. Mione On: 8-Sep-1986
- ; 0056 1 ! Make KERMIT-32 close the terminal (so the terminal
- ; 0057 1 ! parameters are appropriately reset) upon reciept of
- ; 0058 1 ! a GENERIC LOGOUT packet.
- ; 0059 1 !
- ; 0060 1 ! 3.3.113 JHW0002 Jonathan Welch, 5-May-1988 11:48
- ; 0061 1 ! Modified SY_TIME to use $GETTIM as opposed to the LIB$timer
- ; 0062 1 ! routines (which broke when their method of calculating
- ; 0063 1 ! time differences changed in V4.4?).
- ; 0064 1 !
- ; 0065 1 ! Removed the call to LIB$INIT_TIMER in SY_INIT.
- ; 0066 1 !--
- ; 0067 1
- ; 0068 1 %SBTTL 'Include files'
- ; 0069 1 !
- ; 0070 1 ! INCLUDE FILES:
- ; 0071 1 !
- ; 0072 1
- ; 0073 1 LIBRARY 'SYS$LIBRARY:STARLET';
- ; 0074 1
- ; 0075 1 LIBRARY 'SYS$LIBRARY:TPAMAC';
- ; 0076 1
- ; 0077 1 REQUIRE 'KERCOM'; ! Common definitions
- ; 0286 1
- ; 0287 1 REQUIRE 'KERERR'; ! Error message symbol definitions
- ; 0353 1
- ; 0354 1 %SBTTL 'Storage -- Local'
- ; 0355 1 !
- ; 0356 1 ! OWN STORAGE:
- ; 0357 1 !
- ; 0358 1
- ; 0359 1 OWN
- ; 0360 1 VMS_VERSION, ! Major version number of VMS
- ; 0361 1 ORG_DEFAULT_DIR_TEXT : VECTOR [MAX_FILE_NAME, BYTE], ! Text of default dir
- ; 0362 1 ORG_DEFAULT_DIR : BLOCK [8, BYTE], ! Original default directory
- ; 0363 1 ORG_DEFAULT_DEV_TEXT : VECTOR [MAX_FILE_NAME, BYTE], ! Text of default device
- ; 0364 1 ORG_DEFAULT_DEV : BLOCK [8, BYTE], ! Descriptor for orginal default device
- ; 0365 1 Subtrahend : VECTOR [2, LONG]; ! Constant to subtract from system time.
- ; 0366 1
- ; 0367 1 !<BLF/FORMAT>
- ; 0368 1 %SBTTL 'External routines'
- ; 0369 1 !
- ; 0370 1 ! EXTERNAL REFERENCES:
- ; 0371 1 !
- ; 0372 1
- ; 0373 1 EXTERNAL ROUTINE
- ; 0374 1 !
- ; 0375 1 ! Library routines
- ; 0376 1 !
- ; 0377 1 LIB$EDIV : ADDRESSING_MODE (GENERAL),
- ; 0378 1 LIB$SET_LOGICAL : ADDRESSING_MODE (GENERAL),
- ; 0379 1 LIB$SIGNAL : ADDRESSING_MODE (GENERAL) NOVALUE,
- ; 0380 1 LIB$SPAWN : ADDRESSING_MODE (GENERAL),
- ; 0381 1 LIB$SUBX : ADDRESSING_MODE (GENERAL),
- ; 0382 1 OTS$CVT_L_TZ : ADDRESSING_MODE (GENERAL) NOVALUE,
- ; 0383 1 SYS$SETDDIR : ADDRESSING_MODE (GENERAL),
- ; 0384 1 SYS$GETTIM : ADDRESSING_MODE (GENERAL),
- ; 0385 1 !
- ; 0386 1 ! KERTRM - Terminal handling routines
- ; 0387 1 !
- ; 0388 1 TERM_CLOSE, ! Close terminal and restore characteristics
- ; 0389 1
- ; 0390 1 !
- ; 0391 1 ! KERTT - Text processing
- ; 0392 1 !
- ; 0393 1 TT_INIT : NOVALUE, ! Initialization routine
- ; 0394 1 TT_TEXT : NOVALUE, ! Output a text string
- ; 0395 1 TT_NUMBER : NOVALUE, ! Output a number
- ; 0396 1 TT_CHAR : NOVALUE, ! Output a single character
- ; 0397 1 TT_OUTPUT : NOVALUE, ! Routine to dump the current
- ; 0398 1 ! text line.
- ; 0399 1 TT_CRLF : NOVALUE; ! Output the line
- ; 0400 1
- ; 0401 1 %SBTTL 'External storage'
- ; 0402 1 !
- ; 0403 1 ! EXTERNAL Storage:
- ; 0404 1 !
- ; 0405 1
- ; 0406 1 EXTERNAL
- ; 0407 1 !
- ; 0408 1 ! KERMSG storage
- ; 0409 1 !
- ; 0410 1 GEN_1DATA : VECTOR [CH$ALLOCATION (MAX_MSG)], ! Data for generic command
- ; 0411 1 GEN_1SIZE, ! Size of data in GEN_1DATA
- ; 0412 1 GEN_2DATA : VECTOR [CH$ALLOCATION (MAX_MSG)], ! Second argument for generic command
- ; 0413 1 GEN_2SIZE, ! Size of data in GEN_2DATA
- ; 0414 1 GEN_3DATA : VECTOR [CH$ALLOCATION (MAX_MSG)], ! Third arg for generic command
- ; 0415 1 GEN_3SIZE, ! Size of data in GEN_3DATA
- ; 0416 1 !
- ; 0417 1 ! Misc constants.
- ; 0418 1 !
- ; 0419 1 FILE_SIZE, ! Number of characters in FILE_NAME
- ; 0420 1 FILE_NAME : VECTOR [CH$ALLOCATION (MAX_FILE_NAME)];
- ; 0421 1
- ; 0422 1 %SBTTL 'SY_INIT - Initialize KERSYS'
- ; 0423 1
- ; 0424 1 GLOBAL ROUTINE SY_INIT : NOVALUE =
- ; 0425 1
- ; 0426 1 !++
- ; 0427 1 ! FUNCTIONAL DESCRIPTION:
- ; 0428 1 !
- ; 0429 1 ! This routine will initialize the module KERSYS.
- ; 0430 1 !
- ; 0431 1 ! CALLING SEQUENCE:
- ; 0432 1 !
- ; 0433 1 ! SY_INIT ();
- ; 0434 1 !
- ; 0435 1 ! INPUT PARAMETERS:
- ; 0436 1 !
- ; 0437 1 ! None.
- ; 0438 1 !
- ; 0439 1 ! IMPLICIT INPUTS:
- ; 0440 1 !
- ; 0441 1 ! None.
- ; 0442 1 !
- ; 0443 1 ! OUPTUT PARAMETERS:
- ; 0444 1 !
- ; 0445 1 ! None.
- ; 0446 1 !
- ; 0447 1 ! IMPLICIT OUTPUTS:
- ; 0448 1 !
- ; 0449 1 ! None.
- ; 0450 1 !
- ; 0451 1 ! COMPLETION CODES:
- ; 0452 1 !
- ; 0453 1 ! None.
- ; 0454 1 !
- ; 0455 1 ! SIDE EFFECTS:
- ; 0456 1 !
- ; 0457 1 ! KERSYS storage initialized
- ; 0458 1 !
- ; 0459 1 !--
- ; 0460 1
- ; 0461 2 BEGIN
- ; 0462 2
- ; 0463 2 LITERAL
- ; 0464 2 SYI_EFN = 10; ! EFN to use for $GETSYI
- ; 0465 2
- ; 0466 2 LOCAL
- ; 0467 2 VERSION_STRING : VECTOR [8, BYTE], ! Return version string here
- ; 0468 2 VERSION_LENGTH, ! And length here
- ; 0469 2 SYI_ITEM_LIST : BLOCK [16, BYTE], ! Argument list for $GETSYI
- ; 0470 2 LENGTH, ! Length of default dir returned
- ; 0471 2 STATUS;
- ; 0472 2
- ; 0473 2 EXTERNAL ROUTINE
- ; 0474 2 LIB$SYS_TRNLOG : ADDRESSING_MODE(GENERAL);
- ; 0475 2
- ; 0476 2 !
- ; 0477 2 ! Set up arg list for $GETSYI
- ; 0478 2 !
- ; 0479 2 SYI_ITEM_LIST [0, 0, 16, 0] = 8; ! We expect an 8-byte string
- ; 0480 2 SYI_ITEM_LIST [2, 0, 16, 0] = SYI$_VERSION; ! Want the VMS version
- ; 0481 2 SYI_ITEM_LIST [4, 0, 32, 0] = VERSION_STRING; ! Put it here
- ; 0482 2 SYI_ITEM_LIST [8, 0, 32, 0] = VERSION_LENGTH; ! Length goes here
- ; 0483 2 SYI_ITEM_LIST [12, 0, 32, 0] = 0; ! End the list
- ; 0484 2 STATUS = $GETSYI (EFN=SYI_EFN, ITMLST=SYI_ITEM_LIST); ! Get the data
- ; 0485 2 IF NOT .STATUS ! If we can't get the version
- ; 0486 2 THEN
- ; 0487 2 VMS_VERSION = 0 ! Assume very old VMS?
- ; 0488 2 ELSE
- ; 0489 3 BEGIN
- ; 0490 3 STATUS = $WAITFR (EFN=SYI_EFN); ! Wait for completion
- ; 0491 3 IF .STATUS ! If we got it
- ; 0492 3 THEN
- ; 0493 4 BEGIN
- ; 0494 4 IF .VERSION_STRING [0] GEQ %C'0' AND
- ; 0495 4 .VERSION_STRING [0] LEQ %C'9' ! If first character is numeric
- ; 0496 4 THEN
- ; 0497 4 VMS_VERSION = (.VERSION_STRING[0] - %C'0')*10 ! save first digit
- ; 0498 4 ELSE
- ; 0499 4 VMS_VERSION = 0; ! No first digit, store 0
- ; 0500 4 VMS_VERSION = .VMS_VERSION + .VERSION_STRING[1] - %C'0' ! Get rest of version
- ; 0501 4 END
- ; 0502 3 ELSE
- ; 0503 3 VMS_VERSION = 0; ! Can't get version?
- ; 0504 2 END;
- ; 0505 2 !
- ; 0506 2 ! Set up original default directory
- ; 0507 2 !
- ; 0508 2 ORG_DEFAULT_DIR [DSC$B_CLASS] = DSC$K_CLASS_S;
- ; 0509 2 ORG_DEFAULT_DIR [DSC$B_DTYPE] = DSC$K_DTYPE_T;
- ; 0510 2 ORG_DEFAULT_DIR [DSC$W_LENGTH] = MAX_FILE_NAME;
- ; 0511 2 ORG_DEFAULT_DIR [DSC$A_POINTER] = ORG_DEFAULT_DIR_TEXT;
- ; 0512 2 STATUS = SYS$SETDDIR (0, LENGTH, ORG_DEFAULT_DIR);
- ; 0513 2
- ; 0514 2 IF .STATUS THEN ORG_DEFAULT_DIR [DSC$W_LENGTH] = .LENGTH ELSE ORG_DEFAULT_DIR [DSC$W_LENGTH] = 0;
- ; 0515 2 !
- ; 0516 2 ! Get original default device
- ; 0517 2 !
- ; 0518 2 ORG_DEFAULT_DEV [DSC$B_CLASS] = DSC$K_CLASS_S;
- ; 0519 2 ORG_DEFAULT_DEV [DSC$B_DTYPE] = DSC$K_DTYPE_T;
- ; 0520 2 ORG_DEFAULT_DEV [DSC$W_LENGTH] = MAX_FILE_NAME;
- ; 0521 2 ORG_DEFAULT_DEV [DSC$A_POINTER] = ORG_DEFAULT_DEV_TEXT;
- ; 0522 2 STATUS = LIB$SYS_TRNLOG (%ASCID'SYS$DISK', LENGTH, ORG_DEFAULT_DEV);
- ; 0523 2
- ; 0524 2 IF .STATUS EQL SS$_NOTRAN ! No translation?
- ; 0525 2 THEN
- ; 0526 2 LENGTH = 0; ! Yes, set the length to zero
- ; 0527 2 IF .STATUS THEN ORG_DEFAULT_DEV [DSC$W_LENGTH] = .LENGTH ELSE ORG_DEFAULT_DEV [DSC$W_LENGTH] = 0;
- ; 0528 2
- ; 0529 1 END; ! End of SY_INIT
-
-
- .TITLE KERSYS
- .IDENT \3.3.113\
-
- .PSECT $OWN$,NOEXE,2
-
- ;VMS_VERSION
- U.1: .BLKB 4 ; 00000
- ;ORG_DEFAULT_DIR_TEXT
- U.2: .BLKB 132 ; 00004
- ;ORG_DEFAULT_DIR
- U.3: .BLKB 8 ; 00088
- ;ORG_DEFAULT_DEV_TEXT
- U.4: .BLKB 132 ; 00090
- ;ORG_DEFAULT_DEV
- U.5: .BLKB 8 ; 00114
- ;SUBTRAHEND
- U.6: .BLKB 8 ; 0011C
-
- .PSECT $PLIT$,NOWRT,NOEXE,2
-
- P.AAB: .ASCII \SYS$DISK\ ; 4B 53 49 44 24 53 59 53 00000
- P.AAA: .LONG 17694728 ; 010E0008 00008
- .ADDRESS P.AAB ; 00000000' 0000C
-
- FNM_NORMAL== 1
- FNM_FULL== 2
- FNM_UNTRAN== 4
- PR_MIN== 0
- PR_NONE== 0
- PR_MARK== 1
- PR_EVEN== 2
- PR_ODD== 3
- PR_SPACE== 4
- PR_MAX== 4
- GC_MIN== 1
- GC_EXIT== 1
- GC_DIRECTORY== 2
- GC_DISK_USAGE== 3
- GC_DELETE== 4
- GC_TYPE== 5
- GC_HELP== 6
- GC_LOGOUT== 7
- GC_LGN== 8
- GC_CONNECT== 9
- GC_RENAME== 10
- GC_COPY== 11
- GC_WHO== 12
- GC_SEND_MSG== 13
- GC_STATUS== 14
- GC_COMMAND== 15
- GC_KERMIT== 16
- GC_JOURNAL== 17
- GC_VARIABLE== 18
- GC_PROGRAM== 19
- GC_MAX== 19
- DP_FULL== 0
- DP_HALF== 1
- CHK_1CHAR== 49
- CHK_2CHAR== 50
- CHK_CRC== 51
- MAX_MSG== 1002
- .EXTRN LIB$EDIV, LIB$SET_LOGICAL, LIB$SIGNAL, LIB$SPAWN, LIB$SUBX, OTS$CVT_L_TZ, SYS$SETDDIR
- .EXTRN SYS$GETTIM, TERM_CLOSE, TT_INIT, TT_TEXT, TT_NUMBER, TT_CHAR, TT_OUTPUT, TT_CRLF, GEN_1DATA
- .EXTRN GEN_1SIZE, GEN_2DATA, GEN_2SIZE, GEN_3DATA, GEN_3SIZE, FILE_SIZE, FILE_NAME, LIB$SYS_TRNLOG
- .EXTRN SYS$GETSYI, SYS$WAITFR
-
- .PSECT $CODE$,NOWRT,2
-
- .ENTRY SY_INIT, ^M<R2> ;SY_INIT, Save R2 0424 0004 00000
- MOVAB G^U.1, R2 ;U.1, R2 52 00000000' 00 9E 00002
- SUBL2 #32, SP ;#32, SP 5E 20 C2 00009
- MOVL #268435464, 8(SP) ;#268435464, SYI_ITEM_LIST 0480 08 AE 10000008 8F D0 0000C
- MOVAB 24(SP), 12(SP) ;VERSION_STRING, SYI_ITEM_LIST+4 0481 0C AE 18 AE 9E 00014
- MOVAB (SP), 16(SP) ;VERSION_LENGTH, SYI_ITEM_LIST+8 0482 10 AE 6E 9E 00019
- CLRL 20(SP) ;SYI_ITEM_LIST+12 0483 14 AE D4 0001D
- CLRQ -(SP) ;-(SP) 0484 7E 7C 00020
- CLRL -(SP) ;-(SP) 7E D4 00022
- PUSHAB 20(SP) ;SYI_ITEM_LIST 14 AE 9F 00024
- CLRQ -(SP) ;-(SP) 7E 7C 00027
- PUSHL #10 ;#10 0A DD 00029
- CALLS #7, G^SYS$GETSYI ;#7, SYS$GETSYI 00000000G 00 07 FB 0002B
- BLBC R0, 3$ ;STATUS, 3$ 0485 34 50 E9 00032
- PUSHL #10 ;#10 0490 0A DD 00035
- CALLS #1, G^SYS$WAITFR ;#1, SYS$WAITFR 00000000G 00 01 FB 00037
- BLBC R0, 3$ ;STATUS, 3$ 0491 28 50 E9 0003E
- CMPB 24(SP), #48 ;VERSION_STRING, #48 0494 30 18 AE 91 00041
- BLSSU 1$ ;1$ 13 1F 00045
- CMPB 24(SP), #57 ;VERSION_STRING, #57 0495 39 18 AE 91 00047
- BGTRU 1$ ;1$ 0D 1A 0004B
- MOVZBL 24(SP), R1 ;VERSION_STRING, R1 0497 51 18 AE 9A 0004D
- SUBL2 #48, R1 ;#48, R1 51 30 C2 00051
- MULL3 #10, R1, (R2) ;#10, R1, VMS_VERSION 51 0A C5 00054
- ; 62 00057
- BRB 2$ ;2$ 02 11 00058
- 1$: CLRL (R2) ;VMS_VERSION 0499 62 D4 0005A
- 2$: MOVZBL 25(SP), R1 ;VERSION_STRING+1, R1 0500 51 19 AE 9A 0005C
- ADDL2 (R2), R1 ;VMS_VERSION, R1 51 62 C0 00060
- MOVAB -48(R1), (R2) ;-48(R1), VMS_VERSION 62 D0 A1 9E 00063
- BRB 4$ ;4$ 02 11 00067
- 3$: CLRL (R2) ;VMS_VERSION 0503 62 D4 00069
- 4$: MOVL #17694852, 136(R2) ;#17694852, ORG_DEFAULT_DIR 0510 0088 C2 010E0084 8F D0 0006B
- MOVAB 4(R2), 140(R2) ;ORG_DEFAULT_DIR_TEXT, - 0511 008C C2 04 A2 9E 00074
- ;ORG_DEFAULT_DIR+4
- PUSHAB 136(R2) ;ORG_DEFAULT_DIR 0512 0088 C2 9F 0007A
- PUSHAB 8(SP) ;LENGTH 08 AE 9F 0007E
- CLRL -(SP) ;-(SP) 7E D4 00081
- CALLS #3, G^SYS$SETDDIR ;#3, SYS$SETDDIR 00000000G 00 03 FB 00083
- BLBC R0, 5$ ;STATUS, 5$ 0514 08 50 E9 0008A
- MOVW 4(SP), 136(R2) ;LENGTH, ORG_DEFAULT_DIR 0088 C2 04 AE B0 0008D
- BRB 6$ ;6$ 04 11 00093
- 5$: CLRW 136(R2) ;ORG_DEFAULT_DIR 0088 C2 B4 00095
- 6$: MOVL #17694852, 276(R2) ;#17694852, ORG_DEFAULT_DEV 0520 0114 C2 010E0084 8F D0 00099
- MOVAB 144(R2), 280(R2) ;ORG_DEFAULT_DEV_TEXT, - 0521 0118 C2 0090 C2 9E 000A2
- ;ORG_DEFAULT_DEV+4
- PUSHAB 276(R2) ;ORG_DEFAULT_DEV 0522 0114 C2 9F 000A9
- PUSHAB 8(SP) ;LENGTH 08 AE 9F 000AD
- PUSHAB G^P.AAA ;P.AAA 00000000' 00 9F 000B0
- CALLS #3, G^LIB$SYS_TRNLOG ;#3, LIB$SYS_TRNLOG 00000000G 00 03 FB 000B6
- CMPL R0, #1577 ;STATUS, #1577 0524 00000629 8F 50 D1 000BD
- BNEQ 7$ ;7$ 03 12 000C4
- CLRL 4(SP) ;LENGTH 0526 04 AE D4 000C6
- 7$: BLBC R0, 8$ ;STATUS, 8$ 0527 07 50 E9 000C9
- MOVW 4(SP), 276(R2) ;LENGTH, ORG_DEFAULT_DEV 0114 C2 04 AE B0 000CC
- RET ; 04 000D2
- 8$: CLRW 276(R2) ;ORG_DEFAULT_DEV 0114 C2 B4 000D3
- RET ; 0529 04 000D7
-
- ; Routine Size: 216 bytes, Routine Base: $CODE$ + 0000
-
-
- ; 0530 1
- ; 0531 1 %SBTTL 'SY_LOGOUT - delete the process.'
- ; 0532 1
- ; 0533 1 GLOBAL ROUTINE SY_LOGOUT : NOVALUE =
- ; 0534 1
- ; 0535 1 !++
- ; 0536 1 ! FUNCTIONAL DESCRIPTION:
- ; 0537 1 !
- ; 0538 1 ! This routine will delete this process.
- ; 0539 1 !
- ; 0540 1 ! CALLING SEQUENCE:
- ; 0541 1 !
- ; 0542 1 ! SY_LOGOUT ();
- ; 0543 1 !
- ; 0544 1 ! INPUT PARAMETERS:
- ; 0545 1 !
- ; 0546 1 ! None.
- ; 0547 1 !
- ; 0548 1 ! IMPLICIT INPUTS:
- ; 0549 1 !
- ; 0550 1 ! None.
- ; 0551 1 !
- ; 0552 1 ! OUTPUT PARAMETERS:
- ; 0553 1 !
- ; 0554 1 ! None.
- ; 0555 1 !
- ; 0556 1 ! IMPLICIT OUTPUTS:
- ; 0557 1 !
- ; 0558 1 ! None.
- ; 0559 1 !
- ; 0560 1 ! COMPLETION CODES:
- ; 0561 1 !
- ; 0562 1 ! None.
- ; 0563 1 !
- ; 0564 1 ! SIDE EFFECTS:
- ; 0565 1 !
- ; 0566 1 ! None.
- ; 0567 1 !
- ; 0568 1 !--
- ; 0569 1
- ; 0570 2 BEGIN
- ; 0571 2 TERM_CLOSE(); ![108] Close the terminal early
- ; 0572 2 $DELPRC ();
- ; 0573 1 END; ! End of SY_LOGOUT
-
-
-
- .EXTRN SYS$DELPRC
-
- .ENTRY SY_LOGOUT, ^M<> ;SY_LOGOUT, Save nothing 0533 0000 00000
- CALLS #0, G^TERM_CLOSE ;#0, TERM_CLOSE 0571 00000000G 00 00 FB 00002
- CLRQ -(SP) ;-(SP) 0572 7E 7C 00009
- CALLS #2, G^SYS$DELPRC ;#2, SYS$DELPRC 00000000G 00 02 FB 0000B
- RET ; 0573 04 00012
-
- ; Routine Size: 19 bytes, Routine Base: $CODE$ + 00D8
-
-
- ; 0574 1
- ; 0575 1 %SBTTL 'SY_GENERIC - Perform a generic command'
- ; 0576 1
- ; 0577 1 GLOBAL ROUTINE SY_GENERIC (GCMD_TYPE, STRING_ADDRESS, STRING_LENGTH, GET_CHR_RTN) =
- ; 0578 1
- ; 0579 1 !++
- ; 0580 1 ! FUNCTIONAL DESCRIPTION:
- ; 0581 1 !
- ; 0582 1 ! This routine will perform a generic command.
- ; 0583 1 !
- ; 0584 1 ! CALLING SEQUENCE:
- ; 0585 1 !
- ; 0586 1 ! SY_GENERIC (GCMD_TYPE, STRING_ADDRESS, STRING_LENGTH, GET_CHR_RTN);
- ; 0587 1 !
- ; 0588 1 ! INPUT PARAMETERS:
- ; 0589 1 !
- ; 0590 1 ! GCMD_TYPE - GC_xxx value for command to be performed
- ; 0591 1 ! STRING_ADDRESS - Place to return address of string result
- ; 0592 1 ! STRING_LENGTH - Place to return length of string result
- ; 0593 1 ! GET_CHR_RTN - Place to return address of a get a character routine
- ; 0594 1 !
- ; 0595 1 ! IMPLICIT INPUTS:
- ; 0596 1 !
- ; 0597 1 ! None.
- ; 0598 1 !
- ; 0599 1 ! OUTPUT PARAMETERS:
- ; 0600 1 !
- ; 0601 1 ! Returns KER_xxx status
- ; 0602 1 !
- ; 0603 1 ! IMPLICIT OUTPUTS:
- ; 0604 1 !
- ; 0605 1 ! None.
- ; 0606 1 !
- ; 0607 1 ! COMPLETION CODES:
- ; 0608 1 !
- ; 0609 1 ! None.
- ; 0610 1 !
- ; 0611 1 ! SIDE EFFECTS:
- ; 0612 1 !
- ; 0613 1 ! None.
- ; 0614 1 !
- ; 0615 1 !--
- ; 0616 1
- ; 0617 2 BEGIN
- ; 0618 2
- ; 0619 2 LITERAL
- ; 0620 2 MAX_CMD_LEN = 2*MAX_MSG, ! Max command length
- ; 0621 2 MAX_MBX_LEN = 20; ! Max mailbox name length
- ; 0622 2
- ; 0623 2 OWN
- ; 0624 2 RSP_TEXT : VECTOR [MAX_CMD_LEN, BYTE], ! Return text
- ; 0625 2 RSP_LEN; ! Length of return text
- ; 0626 2
- ; 0627 2 LOCAL
- ; 0628 2 STATUS, ! Status results
- ; 0629 2 FLAGS, ! Flag word for LIB$SPAWN
- ; 0630 2 OUR_PID, ! Our PID value
- ; 0631 2 ITMLST : VECTOR [4, LONG], ! GETJPI argument
- ; 0632 2 POINTER, ! Character pointer
- ; 0633 2 MBX_CHAN, ! Channel for mail box
- ; 0634 2 COMMAND_LENGTH, ! Length of command string
- ; 0635 2 COMMAND_DESC : BLOCK [8, BYTE], ! Descriptor for command string
- ; 0636 2 COMMAND_STR : VECTOR [MAX_CMD_LEN, BYTE], ! Actual command string
- ; 0637 2 MBX_DESC : BLOCK [8, BYTE], ! Mailbox equivalence name
- ; 0638 2 MBX_NAME : VECTOR [MAX_MBX_LEN, BYTE]; ! Storage for MBX name
- ; 0639 2
- ; 0640 2 ROUTINE PROCESS_COMPLETION_AST (MBX_CHAN) =
- ; 0641 2 !
- ; 0642 2 ! This routine is called upon process completion (of the process we spawned
- ; 0643 2 ! to perform the command). It will ensure that the mailbox gets an end-of-file.
- ; 0644 2 !
- ; 0645 3 BEGIN
- ; 0646 3 RETURN $QIO (CHAN = .MBX_CHAN, FUNC = IO$_WRITEOF); ! Write the EOF
- ; 0647 2 END;
-
-
-
- .PSECT $OWN$,NOEXE,2
-
- ;RSP_TEXT
- U.10: .BLKB 2004 ; 00124
- ;RSP_LEN
- U.11: .BLKB 4 ; 008F8
-
- .EXTRN SYS$QIO
-
- .PSECT $CODE$,NOWRT,2
-
- ;PROCESS_COMPLETION_AST
- U.12: .WORD ^M<> ;Save nothing 0640 0000 00000
- CLRQ -(SP) ;-(SP) 0646 7E 7C 00002
- CLRQ -(SP) ;-(SP) 7E 7C 00004
- CLRQ -(SP) ;-(SP) 7E 7C 00006
- CLRQ -(SP) ;-(SP) 7E 7C 00008
- MOVQ #40, -(SP) ;#40, -(SP) 7E 28 7D 0000A
- PUSHL 4(AP) ;MBX_CHAN 04 AC DD 0000D
- CLRL -(SP) ;-(SP) 7E D4 00010
- CALLS #12, G^SYS$QIO ;#12, SYS$QIO 00000000G 00 0C FB 00012
- RET ; 04 00019
-
- ; Routine Size: 26 bytes, Routine Base: $CODE$ + 00EB
-
-
- ; 0648 2 ROUTINE CONCAT (SRC_ADR, SRC_LEN, DST_PTR, DST_LEN) : NOVALUE =
- ; 0649 2 !
- ; 0650 2 ! This routine is called to concatenate a string onto the current string
- ; 0651 2 !
- ; 0652 3 BEGIN
- ; 0653 3
- ; 0654 3 LOCAL
- ; 0655 3 LENGTH; ! Length we will actually move
- ; 0656 3
- ; 0657 3 LENGTH = .SRC_LEN; ! Get total length
- ; 0658 3
- ; 0659 3 IF .LENGTH GTR MAX_CMD_LEN - ..DST_LEN THEN LENGTH = MAX_CMD_LEN - ..DST_LEN;
- ; 0660 3
- ; 0661 3 CH$MOVE (.LENGTH, CH$PTR (.SRC_ADR), ..DST_PTR);
- ; 0662 3 .DST_PTR = CH$PLUS (.LENGTH, ..DST_PTR);
- ; 0663 3 .DST_LEN = ..DST_LEN + .LENGTH; ! Update length
- ; 0664 2 END;
-
-
-
-
-
- ;CONCAT
- U.13: .WORD ^M<R2,R3,R4,R5,R6,R7> ;Save R2,R3,R4,R5,R6,R7 0648 00FC 00000
- MOVL 8(AP), R7 ;SRC_LEN, LENGTH 0657 57 08 AC D0 00002
- SUBL3 #2004, @16(AP), R1 ;#2004, @DST_LEN, R1 0659 10 BC 000007D4 8F C3 00006
- ; 51 0000E
- MNEGL R1, R0 ;R1, R0 50 51 CE 0000F
- CMPL R7, R0 ;LENGTH, R0 50 57 D1 00012
- BLEQ 1$ ;1$ 03 15 00015
- MNEGL R1, R7 ;R1, LENGTH 57 51 CE 00017
- 1$: MOVL 12(AP), R6 ;DST_PTR, R6 0661 56 0C AC D0 0001A
- MOVC3 R7, @4(AP), @0(R6) ;LENGTH, @SRC_ADR, @0(R6) 04 BC 57 28 0001E
- ; 00 B6 00022
- ADDL2 R7, (R6) ;LENGTH, (R6) 0662 66 57 C0 00024
- ADDL2 R7, @16(AP) ;LENGTH, @DST_LEN 0663 10 BC 57 C0 00027
- RET ; 0664 04 0002B
-
- ; Routine Size: 44 bytes, Routine Base: $CODE$ + 0105
-
-
- ; 0665 2 !
- ; 0666 2 ! Initialize the command descriptor
- ; 0667 2 !
- ; 0668 2 COMMAND_DESC [DSC$B_CLASS] = DSC$K_CLASS_S;
- ; 0669 2 COMMAND_DESC [DSC$B_DTYPE] = DSC$K_DTYPE_T;
- ; 0670 2 COMMAND_LENGTH = 0; ! Nothing here yet
- ; 0671 2 COMMAND_DESC [DSC$A_POINTER] = COMMAND_STR; ! Point at string storage
- ; 0672 2 POINTER = CH$PTR (COMMAND_STR);
- ; 0673 2 !
- ; 0674 2 ! Determine what to do with the command
- ; 0675 2 !
- ; 0676 2
- ; 0677 2 CASE .GCMD_TYPE FROM GC_MIN TO GC_MAX OF
- ; 0678 2 SET
- ; 0679 2
- ; 0680 2 [GC_COPY] :
- ; 0681 3 BEGIN
- ; 0682 3
- ; 0683 3 EXTERNAL
- ; 0684 3 GEN_COPY_CMD : BLOCK [8, BYTE];
- ; 0685 3
- ; 0686 3 CONCAT (.GEN_COPY_CMD [DSC$A_POINTER], .GEN_COPY_CMD [DSC$W_LENGTH], POINTER, COMMAND_LENGTH);
- ; 0687 3 CONCAT (GEN_1DATA, .GEN_1SIZE, POINTER, COMMAND_LENGTH);
- ; 0688 3 CONCAT (UPLIT (%ASCII' '), 1, POINTER, COMMAND_LENGTH);
- ; 0689 3 CONCAT (GEN_2DATA, .GEN_2SIZE, POINTER, COMMAND_LENGTH);
- ; 0690 2 END;
- ; 0691 2
- ; 0692 2 [GC_CONNECT] :
- ; 0693 3 BEGIN
- ; 0694 3
- ; 0695 3 LOCAL
- ; 0696 3 LENGTH,
- ; 0697 3 DIR_FAB : $FAB_DECL, ! FAB for $PARSE
- ; 0698 3 DIR_NAM : $NAM_DECL, ! NAM for $PARSE
- ; 0699 3 EXP_STR : VECTOR [NAM$C_MAXRSS, BYTE], ! Expanded file spec
- ; 0700 3 DEV_DESC : BLOCK [8, BYTE], ! Descriptor for device name
- ; 0701 3 DIR_DESC : BLOCK [8, BYTE];
- ; 0702 3
- ; 0703 3 DIR_DESC [DSC$B_CLASS] = DSC$K_CLASS_S;
- ; 0704 3 DIR_DESC [DSC$B_DTYPE] = DSC$K_DTYPE_T;
- ; 0705 3 DEV_DESC [DSC$B_CLASS] = DSC$K_CLASS_S;
- ; 0706 3 DEV_DESC [DSC$B_DTYPE] = DSC$K_DTYPE_T;
- ; 0707 3
- ; 0708 3 IF .GEN_1SIZE GTR 0
- ; 0709 3 THEN
- ; 0710 4 BEGIN
- ; 0711 4 $FAB_INIT (FAB = DIR_FAB, FOP = NAM, NAM = DIR_NAM, FNA = GEN_1DATA, FNS = .GEN_1SIZE);
- ; 0712 4 $NAM_INIT (NAM = DIR_NAM, ESA = EXP_STR, ESS = NAM$C_MAXRSS);
- ; 0713 4 STATUS = $PARSE (FAB = DIR_FAB);
- ; 0714 4
- ; 0715 4 IF NOT .STATUS
- ; 0716 4 THEN
- ; 0717 5 BEGIN
- ; 0718 5 LIB$SIGNAL (.STATUS);
- ; 0719 5 RETURN .STATUS;
- ; 0720 4 END;
- ; 0721 4
- ; 0722 4 IF .DIR_NAM [NAM$B_NODE] GTR 0
- ; 0723 4 THEN
- ; 0724 5 BEGIN
- ; 0725 5 DEV_DESC [DSC$A_POINTER] = .DIR_NAM [NAM$L_NODE];
- ; 0726 5 DEV_DESC [DSC$W_LENGTH] = .DIR_NAM [NAM$B_NODE] + .DIR_NAM [NAM$B_DEV];
- ; 0727 5 END
- ; 0728 4 ELSE
- ; 0729 5 BEGIN
- ; 0730 5 DEV_DESC [DSC$W_LENGTH] = .DIR_NAM [NAM$B_DEV];
- ; 0731 5 DEV_DESC [DSC$A_POINTER] = .DIR_NAM [NAM$L_DEV];
- ; 0732 4 END;
- ; 0733 4
- ; 0734 4 DIR_DESC [DSC$W_LENGTH] = .DIR_NAM [NAM$B_DIR];
- ; 0735 4 DIR_DESC [DSC$A_POINTER] = .DIR_NAM [NAM$L_DIR];
- ; 0736 4 END
- ; 0737 3 ELSE
- ; 0738 4 BEGIN
- ; 0739 4 DIR_DESC [DSC$W_LENGTH] = .ORG_DEFAULT_DIR [DSC$W_LENGTH];
- ; 0740 4 DIR_DESC [DSC$A_POINTER] = .ORG_DEFAULT_DIR [DSC$A_POINTER];
- ; 0741 4 DEV_DESC [DSC$W_LENGTH] = .ORG_DEFAULT_DEV [DSC$W_LENGTH];
- ; 0742 4 DEV_DESC [DSC$A_POINTER] = .ORG_DEFAULT_DEV [DSC$A_POINTER];
- ; 0743 3 END;
- ; 0744 3
- ; 0745 3 STATUS = LIB$SET_LOGICAL (%ASCID'SYS$DISK', DEV_DESC);
- ; 0746 3
- ; 0747 3 IF NOT .STATUS
- ; 0748 3 THEN
- ; 0749 4 BEGIN
- ; 0750 4 LIB$SIGNAL (.STATUS);
- ; 0751 4 RETURN .STATUS;
- ; 0752 3 END;
- ; 0753 3
- ; 0754 3 STATUS = SYS$SETDDIR (DIR_DESC, 0, 0);
- ; 0755 3
- ; 0756 3 IF NOT .STATUS
- ; 0757 3 THEN
- ; 0758 4 BEGIN
- ; 0759 4 LIB$SIGNAL (.STATUS);
- ; 0760 4 RETURN .STATUS;
- ; 0761 3 END;
- ; 0762 3
- ; 0763 3 DIR_DESC [DSC$A_POINTER] = GEN_1DATA;
- ; 0764 3 DIR_DESC [DSC$W_LENGTH] = MAX_MSG;
- ; 0765 3 STATUS = SYS$SETDDIR (0, DIR_DESC [DSC$W_LENGTH], DIR_DESC);
- ; 0766 3
- ; 0767 3 IF NOT .STATUS
- ; 0768 3 THEN
- ; 0769 4 BEGIN
- ; 0770 4 LIB$SIGNAL (.STATUS);
- ; 0771 4 RETURN .STATUS;
- ; 0772 3 END;
- ; 0773 3
- ; 0774 3 POINTER = CH$PTR (RSP_TEXT);
- ; 0775 3 RSP_LEN = 0;
- ; 0776 3 CONCAT (UPLIT (%ASCII'Default directory set to '), 25, POINTER, RSP_LEN);
- ; 0777 3 CONCAT (.DEV_DESC [DSC$A_POINTER], .DEV_DESC [DSC$W_LENGTH], POINTER, RSP_LEN);
- ; 0778 3 CONCAT (.DIR_DESC [DSC$A_POINTER], .DIR_DESC [DSC$W_LENGTH], POINTER, RSP_LEN);
- ; 0779 3 .STRING_ADDRESS = RSP_TEXT;
- ; 0780 3 .STRING_LENGTH = .RSP_LEN;
- ; 0781 3 RETURN KER_NORMAL;
- ; 0782 2 END;
- ; 0783 2
- ; 0784 2 [GC_DELETE] :
- ; 0785 3 BEGIN
- ; 0786 3
- ; 0787 3 EXTERNAL
- ; 0788 3 GEN_DELETE_CMD : BLOCK [8, BYTE];
- ; 0789 3
- ; 0790 3 CONCAT (.GEN_DELETE_CMD [DSC$A_POINTER], .GEN_DELETE_CMD [DSC$W_LENGTH], POINTER, COMMAND_LENGTH);
- ; 0791 3 CONCAT (GEN_1DATA, .GEN_1SIZE, POINTER, COMMAND_LENGTH);
- ; 0792 2 END;
- ; 0793 2
- ; 0794 2 [GC_DIRECTORY] :
- ; 0795 3 BEGIN
- ; 0796 3
- ; 0797 3 EXTERNAL
- ; 0798 3 GEN_DIR_CMD : BLOCK [8, BYTE];
- ; 0799 3
- ; 0800 3 CONCAT (.GEN_DIR_CMD [DSC$A_POINTER], .GEN_DIR_CMD [DSC$W_LENGTH], POINTER, COMMAND_LENGTH);
- ; 0801 3 CONCAT (GEN_1DATA, .GEN_1SIZE, POINTER, COMMAND_LENGTH);
- ; 0802 2 END;
- ; 0803 2
- ; 0804 2 [GC_DISK_USAGE] :
- ; 0805 3 BEGIN
- ; 0806 3
- ; 0807 3 EXTERNAL
- ; 0808 3 GEN_USG_CMD : BLOCK [8, BYTE], ! Command without arg
- ; 0809 3 GEN_USG_ARG_CMD : BLOCK [8, BYTE]; ! Command with arg
- ; 0810 3
- ; 0811 3 IF .GEN_1SIZE LEQ 0
- ; 0812 3 THEN
- ; 0813 4 BEGIN
- ; 0814 4 CONCAT (.GEN_USG_CMD [DSC$A_POINTER], .GEN_USG_CMD [DSC$W_LENGTH], POINTER, COMMAND_LENGTH);
- ; 0815 4 END
- ; 0816 3 ELSE
- ; 0817 4 BEGIN
- ; 0818 4 CONCAT (.GEN_USG_ARG_CMD [DSC$A_POINTER], .GEN_USG_ARG_CMD [DSC$W_LENGTH], POINTER,
- ; 0819 4 COMMAND_LENGTH);
- ; 0820 4 CONCAT (GEN_1DATA, .GEN_1SIZE, POINTER, COMMAND_LENGTH);
- ; 0821 3 END;
- ; 0822 3
- ; 0823 2 END;
- ; 0824 2
- ; 0825 2 [GC_HELP] :
- ; 0826 3 BEGIN
- ; 0827 3
- ; 0828 3 EXTERNAL
- ; 0829 3 GEN_HELP_TEXT : BLOCK [8, BYTE];
- ; 0830 3
- ; 0831 3 .STRING_ADDRESS = .GEN_HELP_TEXT [DSC$A_POINTER];
- ; 0832 3 .STRING_LENGTH = .GEN_HELP_TEXT [DSC$W_LENGTH];
- ; 0833 3 RETURN KER_NORMAL;
- ; 0834 2 END;
- ; 0835 2
- ; 0836 2 [GC_RENAME] :
- ; 0837 3 BEGIN
- ; 0838 3
- ; 0839 3 EXTERNAL
- ; 0840 3 GEN_REN_CMD : BLOCK [8, BYTE];
- ; 0841 3
- ; 0842 3 CONCAT (.GEN_REN_CMD [DSC$A_POINTER], .GEN_REN_CMD [DSC$W_LENGTH], POINTER, COMMAND_LENGTH);
- ; 0843 3 CONCAT (GEN_1DATA, .GEN_1SIZE, POINTER, COMMAND_LENGTH);
- ; 0844 3 CONCAT (UPLIT (%ASCII' '), 1, POINTER, COMMAND_LENGTH);
- ; 0845 3 CONCAT (GEN_2DATA, .GEN_2SIZE, POINTER, COMMAND_LENGTH);
- ; 0846 2 END;
- ; 0847 2
- ; 0848 2 [GC_SEND_MSG] :
- ; 0849 3 BEGIN
- ; 0850 3
- ; 0851 3 EXTERNAL
- ; 0852 3 GEN_SEND_CMD : BLOCK [8, BYTE];
- ; 0853 3
- ; 0854 3 CONCAT (.GEN_SEND_CMD [DSC$A_POINTER], .GEN_SEND_CMD [DSC$W_LENGTH], POINTER, COMMAND_LENGTH);
- ; 0855 3 CONCAT (GEN_1DATA, .GEN_1SIZE, POINTER, COMMAND_LENGTH);
- ; 0856 3 CONCAT (UPLIT (%ASCII' "'), 2, POINTER, COMMAND_LENGTH);
- ; 0857 3 CONCAT (GEN_2DATA, .GEN_2SIZE, POINTER, COMMAND_LENGTH);
- ; 0858 3 CONCAT (UPLIT (%ASCII'"'), 1, POINTER, COMMAND_LENGTH);
- ; 0859 2 END;
- ; 0860 2
- ; 0861 2 [GC_TYPE] :
- ; 0862 2 !
- ; 0863 2 ! While KERMSG handles this for server requests, COMND_LOCAL in KERMIT does
- ; 0864 2 ! not. Therefore, set up the request to open the correct file.
- ; 0865 2 !
- ; 0866 3 BEGIN
- ; 0867 3 CH$COPY (.GEN_1SIZE, GEN_1DATA, CHR_NUL, MAX_FILE_NAME, FILE_NAME);
- ; 0868 3 FILE_SIZE = .GEN_1SIZE;
- ; 0869 3 RETURN KER_NORMAL;
- ; 0870 2 END;
- ; 0871 2
- ; 0872 2 [GC_WHO] :
- ; 0873 3 BEGIN
- ; 0874 3
- ; 0875 3 EXTERNAL
- ; 0876 3 GEN_WHO_CMD : BLOCK [8, BYTE];
- ; 0877 3
- ; 0878 3 CONCAT (.GEN_WHO_CMD [DSC$A_POINTER], .GEN_WHO_CMD [DSC$W_LENGTH], POINTER, COMMAND_LENGTH);
- ; 0879 3 CONCAT (GEN_1DATA, .GEN_1SIZE, POINTER, COMMAND_LENGTH);
- ; 0880 3 CONCAT (GEN_2DATA, .GEN_2SIZE, POINTER, COMMAND_LENGTH);
- ; 0881 2 END;
- ; 0882 2
- ; 0883 2 [GC_COMMAND] :
- ; 0884 2 ! Host command. Just pass it to the process
- ; 0885 2 CONCAT (GEN_1DATA, .GEN_1SIZE, POINTER, COMMAND_LENGTH);
- ; 0886 2
- ; 0887 2 [INRANGE, OUTRANGE] :
- ; 0888 3 BEGIN
- ; 0889 3 LIB$SIGNAL (KER_UNIMPLGEN);
- ; 0890 3 RETURN KER_UNIMPLGEN; ! We don't do any
- ; 0891 2 END;
- ; 0892 2 TES;
- ; 0893 2
- ; 0894 2 !
- ; 0895 2 ! If we fall out of the case statement, we need to create a mailbox and
- ; 0896 2 ! spawn a process to perform the command with its output going to the
- ; 0897 2 ! mailbox
- ; 0898 2 !
- ; 0899 2 COMMAND_DESC [DSC$W_LENGTH] = .COMMAND_LENGTH; ! Copy command length
- ; 0900 2 ITMLST [0] = JPI$_PID^16 + 4; ! Get PID
- ; 0901 2 ITMLST [1] = OUR_PID; ! Into OUR_PID
- ; 0902 2 ITMLST [2] = ITMLST [2]; ! Get length here
- ; 0903 2 ITMLST [3] = 0; ! End of list
- ; 0904 2 $GETJPI (ITMLST = ITMLST); ! Get info for us
- ; 0905 2 CH$COPY (11, CH$PTR (UPLIT (%ASCII'KERMIT$MBX_')), CHR_NUL, ! Build name
- ; 0906 2 MAX_MBX_LEN, CH$PTR (MBX_NAME)); ! for mailbox
- ; 0907 2 MBX_DESC [DSC$B_CLASS] = DSC$K_CLASS_S;
- ; 0908 2 MBX_DESC [DSC$B_DTYPE] = DSC$K_DTYPE_T;
- ; 0909 2 MBX_DESC [DSC$W_LENGTH] = MAX_MBX_LEN - 12; ! MBX name length
- ; 0910 2 MBX_DESC [DSC$A_POINTER] = MBX_NAME + 11; ! Where to build rest of name
- ; 0911 2 OTS$CVT_L_TZ (OUR_PID, MBX_DESC, MAX_MBX_LEN - 12); ! Generate rest of name
- ; 0912 2 MBX_DESC [DSC$W_LENGTH] = MAX_MBX_LEN - 1; ! Set total length for create
- ; 0913 2 MBX_DESC [DSC$A_POINTER] = MBX_NAME; ! Point at start of name
- ; 0914 2 STATUS = $CREMBX (CHAN = MBX_CHAN, LOGNAM = MBX_DESC);
- ; 0915 2
- ; 0916 2 IF NOT .STATUS
- ; 0917 2 THEN
- ; 0918 3 BEGIN
- ; 0919 3 LIB$SIGNAL (.STATUS);
- ; 0920 3 RETURN .STATUS;
- ; 0921 2 END;
- ; 0922 2
- ; 0923 2 MBX_NAME [MAX_MBX_LEN - 1] = %C':'; ! Terminate with colon
- ; 0924 2 MBX_DESC [DSC$W_LENGTH] = MAX_MBX_LEN; ! Set total length including colon
- ; 0925 2 CH$COPY (MAX_MBX_LEN - 1, CH$PTR (MBX_NAME), CHR_NUL, MAX_FILE_NAME, CH$PTR (FILE_NAME));
- ; 0926 2 FILE_SIZE = MAX_MBX_LEN - 1; ! Set up FILE_NAME
- ; 0927 2 FLAGS = 1; ! Don't wait for process
- ; 0928 2 STATUS = LIB$SPAWN ( ! Spawn a DCL subprocess
- ; 0929 2 COMMAND_DESC, ! to do this command
- ; 0930 3 (IF .VMS_VERSION LEQ 3 ! If old VMS
- ; 0931 3 THEN
- ; 0932 3 0 ! Then no SYS$INPUT arg
- ; 0933 3 ELSE
- ; 0934 2 %ASCID'NLA0:'), ! no SYS$INPUT
- ; 0935 2 MBX_DESC, ! set SYS$OUTPUT to mailbox
- ; 0936 2 FLAGS, ! don't wait for process to complete
- ; 0937 2 0, ! Process name
- ; 0938 2 0, ! process id
- ; 0939 2 0, ! completion status
- ; 0940 2 0, ! ?
- ; 0941 3 (IF .VMS_VERSION LEQ 3 ! If VMS 3 or earlier
- ; 0942 3 THEN
- ; 0943 3 PROCESS_COMPLETION_AST ! We need to force eof
- ; 0944 3 ELSE ! when process finishes
- ; 0945 2 0), ! 4.0 and on we get one free
- ; 0946 2 .MBX_CHAN); ! feed ast routine this value
- ; 0947 2
- ; 0948 2 IF NOT .STATUS THEN LIB$SIGNAL (.STATUS);
- ; 0949 2
- ; 0950 2 RETURN .STATUS;
- ; 0951 1 END; ! End of SY_GENERIC
-
-
-
- .PSECT $PLIT$,NOWRT,NOEXE,2
-
- P.AAC: .ASCII \ \<0><0><0> ; 00 00 00 20 00010
- P.AAE: .ASCII \SYS$DISK\ ; 4B 53 49 44 24 53 59 53 00014
- P.AAD: .LONG 17694728 ; 010E0008 0001C
- .ADDRESS P.AAE ; 00000000' 00020
- P.AAF: .ASCII \Default directory set to \<0><0><0>
- ; 20 74 6C 75 61 66 65 44 00024
- ; 72 6F 74 63 65 72 69 64 0002C
- ; 6F 74 20 74 65 73 20 79 00034
- ; 00 00 00 20 0003C
- P.AAG: .ASCII \ \<0><0><0> ; 00 00 00 20 00040
- P.AAH: .ASCII \ "\<0><0> ; 00 00 22 20 00044
- P.AAI: .ASCII \"\<0><0><0> ; 00 00 00 22 00048
- P.AAJ: .ASCII \KERMIT$MBX_\<0> ; 4D 24 54 49 4D 52 45 4B 0004C
- ; 00 5F 58 42 00054
- P.AAL: .ASCII \NLA0:\<0><0><0> ; 00 00 00 3A 30 41 4C 4E 00058
- P.AAK: .LONG 17694725 ; 010E0005 00060
- .ADDRESS P.AAL ; 00000000' 00064
-
- .EXTRN GEN_COPY_CMD, SYS$PARSE, GEN_DELETE_CMD, GEN_DIR_CMD, GEN_USG_CMD, GEN_USG_ARG_CMD
- .EXTRN GEN_HELP_TEXT, GEN_REN_CMD, GEN_SEND_CMD, GEN_WHO_CMD, SYS$GETJPI, SYS$CREMBX
-
- .PSECT $CODE$,NOWRT,2
-
- .ENTRY SY_GENERIC, ^M<R2,R3,R4,R5,R6,- ;SY_GENERIC, Save R2,R3,R4,R5,R6,R7,- 0577 0FFC 00000
- R7,R8,R9,R10,R11> ;R8,R9,R10,R11
- MOVAB G^P.AAC, R11 ;P.AAC, R11 5B 00000000' 00 9E 00002
- MOVAB G^GEN_1DATA, R10 ;GEN_1DATA, R10 5A 00000000G 00 9E 00009
- MOVAB G^GEN_1SIZE, R9 ;GEN_1SIZE, R9 59 00000000G 00 9E 00010
- MOVAB G^U.11, R8 ;U.11, R8 58 00000000' 00 9E 00017
- MOVAB B^U.13, R7 ;U.13, R7 57 B3 AF 9E 0001E
- MOVAB -2520(SP), SP ;-2520(SP), SP 5E F628 CE 9E 00022
- MOVW #270, -22(FP) ;#270, COMMAND_DESC+2 0669 EA AD 010E 8F B0 00027
- CLRL -(SP) ;COMMAND_LENGTH 0670 7E D4 0002D
- MOVAB 496(SP), -20(FP) ;COMMAND_STR, COMMAND_DESC+4 0671 EC AD 01F0 CE 9E 0002F
- MOVAB 496(SP), 4(SP) ;COMMAND_STR, POINTER 0672 04 AE 01F0 CE 9E 00035
- CASEL 4(AP), #1, #18 ;GCMD_TYPE, #1, #18 0677 01 04 AC CF 0003B
- ; 12 0003F
- 1$: .WORD 2$-1$,- ;2$-1$,- 01C3 0026 00040
- 14$-1$,- ;14$-1$,- 01AF 01D7 00044
- 15$-1$,- ;15$-1$,- 0208 0297 00048
- 13$-1$,- ;13$-1$,- 0026 0026 0004C
- 22$-1$,- ;22$-1$,- 021B 0068 00050
- 18$-1$,- ;18$-1$,- 02B5 003B 00054
- 2$-1$,- ;2$-1$,- 0026 0249 00058
- 2$-1$,- ;2$-1$,- 0026 02E9 0005C
- 4$-1$,- ;4$-1$,- 0026 0026 00060
- 20$-1$,- ;20$-1$,- 0026 00064
- 3$-1$,- ;3$-1$,-
- 24$-1$,- ;24$-1$,-
- 21$-1$,- ;21$-1$,-
- 2$-1$,- ;2$-1$,-
- 26$-1$,- ;26$-1$,-
- 2$-1$,- ;2$-1$,-
- 2$-1$,- ;2$-1$,-
- 2$-1$,- ;2$-1$,-
- 2$-1$ ;2$-1$
- 2$: PUSHL #134316210 ;#134316210 0889 080180B2 8F DD 00066
- CALLS #1, G^LIB$SIGNAL ;#1, LIB$SIGNAL 00000000G 00 01 FB 0006C
- MOVL #134316210, R0 ;#134316210, R0 0890 50 080180B2 8F D0 00073
- RET ; 04 0007A
- 3$: PUSHL SP ;SP 0686 5E DD 0007B
- PUSHAB 8(SP) ;POINTER 08 AE 9F 0007D
- MOVZWL G^GEN_COPY_CMD, -(SP) ;GEN_COPY_CMD, -(SP) 7E 00000000G 00 3C 00080
- PUSHL G^GEN_COPY_CMD+4 ;GEN_COPY_CMD+4 00000000G 00 DD 00087
- CALLS #4, (R7) ;#4, CONCAT 67 04 FB 0008D
- PUSHL SP ;SP 0687 5E DD 00090
- PUSHAB 8(SP) ;POINTER 08 AE 9F 00092
- PUSHL (R9) ;GEN_1SIZE 69 DD 00095
- PUSHL R10 ;R10 5A DD 00097
- CALLS #4, (R7) ;#4, CONCAT 67 04 FB 00099
- PUSHL SP ;SP 0688 5E DD 0009C
- PUSHAB 8(SP) ;POINTER 08 AE 9F 0009E
- PUSHL #1 ;#1 01 DD 000A1
- PUSHL R11 ;R11 5B DD 000A3
- BRW 25$ ;25$ 026B 31 000A5
- 4$: MOVW #270, 22(SP) ;#270, DIR_DESC+2 0704 16 AE 010E 8F B0 000A8
- MOVW #270, 30(SP) ;#270, DEV_DESC+2 0706 1E AE 010E 8F B0 000AE
- MOVL (R9), R6 ;GEN_1SIZE, R6 0708 56 69 D0 000B4
- BGTR 5$ ;5$ 03 14 000B7
- BRW 8$ ;8$ 0095 31 000B9
- 5$: MOVC5 #0, (SP), #0, #80, 388(SP) ;#0, (SP), #0, #80, $RMS_PTR 0711 6E 00 2C 000BC
- ; 0050 8F 00 000BF
- ; 0184 CE 000C3
- MOVW #20483, 388(SP) ;#20483, $RMS_PTR 0184 CE 5003 8F B0 000C6
- MOVL #16777216, 392(SP) ;#16777216, $RMS_PTR+4 0188 CE 01000000 8F D0 000CD
- MOVB #2, 410(SP) ;#2, $RMS_PTR+22 019A CE 02 90 000D6
- MOVB #2, 419(SP) ;#2, $RMS_PTR+31 01A3 CE 02 90 000DB
- MOVAB 292(SP), 428(SP) ;DIR_NAM, $RMS_PTR+40 01AC CE 0124 CE 9E 000E0
- MOVAB (R10), 432(SP) ;GEN_1DATA, $RMS_PTR+44 01B0 CE 6A 9E 000E7
- MOVB R6, 440(SP) ;R6, $RMS_PTR+52 01B8 CE 56 90 000EC
- MOVC5 #0, (SP), #0, #96, 292(SP) ;#0, (SP), #0, #96, $RMS_PTR 0712 6E 00 2C 000F1
- ; 0060 8F 00 000F4
- ; 0124 CE 000F8
- MOVW #24578, 292(SP) ;#24578, $RMS_PTR 0124 CE 6002 8F B0 000FB
- MNEGB #1, 302(SP) ;#1, $RMS_PTR+10 012E CE 01 8E 00102
- MOVAB 36(SP), 304(SP) ;EXP_STR, $RMS_PTR+12 0130 CE 24 AE 9E 00107
- PUSHAB 388(SP) ;DIR_FAB 0713 0184 CE 9F 0010D
- CALLS #1, G^SYS$PARSE ;#1, SYS$PARSE 00000000G 00 01 FB 00111
- MOVL R0, R6 ;R0, STATUS 56 50 D0 00118
- BLBC R6, 10$ ;STATUS, 10$ 0715 6D 56 E9 0011B
- MOVZBL 348(SP), R0 ;DIR_NAM+56, R0 0722 50 015C CE 9A 0011E
- BLEQ 6$ ;6$ 12 15 00123
- MOVL 356(SP), 32(SP) ;DIR_NAM+64, DEV_DESC+4 0725 20 AE 0164 CE D0 00125
- MOVZBL 349(SP), R1 ;DIR_NAM+57, R1 0726 51 015D CE 9A 0012B
- ADDW3 R1, R0, 28(SP) ;R1, R0, DEV_DESC 50 51 A1 00130
- ; 1C AE 00133
- BRB 7$ ;7$ 0C 11 00135
- 6$: MOVZBW 349(SP), 28(SP) ;DIR_NAM+57, DEV_DESC 0730 1C AE 015D CE 9B 00137
- MOVL 360(SP), 32(SP) ;DIR_NAM+68, DEV_DESC+4 0731 20 AE 0168 CE D0 0013D
- 7$: MOVZBW 350(SP), 20(SP) ;DIR_NAM+58, DIR_DESC 0734 14 AE 015E CE 9B 00143
- MOVL 364(SP), 24(SP) ;DIR_NAM+72, DIR_DESC+4 0735 18 AE 016C CE D0 00149
- BRB 9$ ;9$ 18 11 0014F
- 8$: MOVW -2160(R8), 20(SP) ;ORG_DEFAULT_DIR, DIR_DESC 0739 14 AE F790 C8 B0 00151
- MOVL -2156(R8), 24(SP) ;ORG_DEFAULT_DIR+4, DIR_DESC+4 0740 18 AE F794 C8 D0 00157
- MOVW -2020(R8), 28(SP) ;ORG_DEFAULT_DEV, DEV_DESC 0741 1C AE F81C C8 B0 0015D
- MOVL -2016(R8), 32(SP) ;ORG_DEFAULT_DEV+4, DEV_DESC+4 0742 20 AE F820 C8 D0 00163
- 9$: PUSHAB 28(SP) ;DEV_DESC 0745 1C AE 9F 00169
- PUSHAB 12(R11) ;P.AAD 0C AB 9F 0016C
- CALLS #2, G^LIB$SET_LOGICAL ;#2, LIB$SET_LOGICAL 00000000G 00 02 FB 0016F
- MOVL R0, R6 ;R0, STATUS 56 50 D0 00176
- BLBC R6, 11$ ;STATUS, 11$ 0747 2E 56 E9 00179
- CLRQ -(SP) ;-(SP) 0754 7E 7C 0017C
- PUSHAB 28(SP) ;DIR_DESC 1C AE 9F 0017E
- CALLS #3, G^SYS$SETDDIR ;#3, SYS$SETDDIR 00000000G 00 03 FB 00181
- MOVL R0, R6 ;R0, STATUS 56 50 D0 00188
- 10$: BLBC R6, 11$ ;STATUS, 11$ 0756 1C 56 E9 0018B
- MOVAB (R10), 24(SP) ;GEN_1DATA, DIR_DESC+4 0763 18 AE 6A 9E 0018E
- MOVW #1002, 20(SP) ;#1002, DIR_DESC 0764 14 AE 03EA 8F B0 00192
- PUSHAB 20(SP) ;DIR_DESC 0765 14 AE 9F 00198
- PUSHAB 24(SP) ;DIR_DESC 18 AE 9F 0019B
- CLRL -(SP) ;-(SP) 7E D4 0019E
- CALLS #3, G^SYS$SETDDIR ;#3, SYS$SETDDIR 00000000G 00 03 FB 001A0
- MOVL R0, R6 ;R0, STATUS 56 50 D0 001A7
- 11$: BLBS R6, 12$ ;STATUS, 12$ 0767 03 56 E8 001AA
- BRW 32$ ;32$ 0262 31 001AD
- 12$: MOVAB -2004(R8), 4(SP) ;RSP_TEXT, POINTER 0774 04 AE F82C C8 9E 001B0
- CLRL (R8) ;RSP_LEN 0775 68 D4 001B6
- PUSHL R8 ;R8 0776 58 DD 001B8
- PUSHAB 8(SP) ;POINTER 08 AE 9F 001BA
- PUSHL #25 ;#25 19 DD 001BD
- PUSHAB 20(R11) ;P.AAF 14 AB 9F 001BF
- CALLS #4, (R7) ;#4, CONCAT 67 04 FB 001C2
- PUSHL R8 ;R8 0777 58 DD 001C5
- PUSHAB 8(SP) ;POINTER 08 AE 9F 001C7
- MOVZWL 36(SP), -(SP) ;DEV_DESC, -(SP) 7E 24 AE 3C 001CA
- PUSHL 44(SP) ;DEV_DESC+4 2C AE DD 001CE
- CALLS #4, (R7) ;#4, CONCAT 67 04 FB 001D1
- PUSHL R8 ;R8 0778 58 DD 001D4
- PUSHAB 8(SP) ;POINTER 08 AE 9F 001D6
- MOVZWL 28(SP), -(SP) ;DIR_DESC, -(SP) 7E 1C AE 3C 001D9
- PUSHL 36(SP) ;DIR_DESC+4 24 AE DD 001DD
- CALLS #4, (R7) ;#4, CONCAT 67 04 FB 001E0
- MOVAB -2004(R8), @8(AP) ;RSP_TEXT, @STRING_ADDRESS 0779 08 BC F82C C8 9E 001E3
- MOVL (R8), @12(AP) ;RSP_LEN, @STRING_LENGTH 0780 0C BC 68 D0 001E9
- BRB 19$ ;19$ 0781 69 11 001ED
- 13$: PUSHL SP ;SP 0790 5E DD 001EF
- PUSHAB 8(SP) ;POINTER 08 AE 9F 001F1
- MOVZWL G^GEN_DELETE_CMD, -(SP) ;GEN_DELETE_CMD, -(SP) 7E 00000000G 00 3C 001F4
- PUSHL G^GEN_DELETE_CMD+4 ;GEN_DELETE_CMD+4 00000000G 00 DD 001FB
- BRB 17$ ;17$ 3F 11 00201
- 14$: PUSHL SP ;SP 0800 5E DD 00203
- PUSHAB 8(SP) ;POINTER 08 AE 9F 00205
- MOVZWL G^GEN_DIR_CMD, -(SP) ;GEN_DIR_CMD, -(SP) 7E 00000000G 00 3C 00208
- PUSHL G^GEN_DIR_CMD+4 ;GEN_DIR_CMD+4 00000000G 00 DD 0020F
- BRB 17$ ;17$ 2B 11 00215
- 15$: TSTL (R9) ;GEN_1SIZE 0811 69 D5 00217
- BGTR 16$ ;16$ 15 14 00219
- PUSHL SP ;SP 0814 5E DD 0021B
- PUSHAB 8(SP) ;POINTER 08 AE 9F 0021D
- MOVZWL G^GEN_USG_CMD, -(SP) ;GEN_USG_CMD, -(SP) 7E 00000000G 00 3C 00220
- PUSHL G^GEN_USG_CMD+4 ;GEN_USG_CMD+4 00000000G 00 DD 00227
- BRW 27$ ;27$ 0102 31 0022D
- 16$: PUSHL SP ;SP 0819 5E DD 00230
- PUSHAB 8(SP) ;POINTER 0818 08 AE 9F 00232
- MOVZWL G^GEN_USG_ARG_CMD, -(SP) ;GEN_USG_ARG_CMD, -(SP) 7E 00000000G 00 3C 00235
- PUSHL G^GEN_USG_ARG_CMD+4 ;GEN_USG_ARG_CMD+4 00000000G 00 DD 0023C
- 17$: CALLS #4, (R7) ;#4, CONCAT 67 04 FB 00242
- BRW 26$ ;26$ 0820 00E1 31 00245
- 18$: MOVL G^GEN_HELP_TEXT+4, @8(AP) ;GEN_HELP_TEXT+4, @STRING_ADDRESS 0831 08 BC 00000000G 00 D0 00248
- MOVZWL G^GEN_HELP_TEXT, @12(AP) ;GEN_HELP_TEXT, @STRING_LENGTH 0832 0C BC 00000000G 00 3C 00250
- 19$: BRW 23$ ;23$ 0833 0092 31 00258
- 20$: PUSHL SP ;SP 0842 5E DD 0025B
- PUSHAB 8(SP) ;POINTER 08 AE 9F 0025D
- MOVZWL G^GEN_REN_CMD, -(SP) ;GEN_REN_CMD, -(SP) 7E 00000000G 00 3C 00260
- PUSHL G^GEN_REN_CMD+4 ;GEN_REN_CMD+4 00000000G 00 DD 00267
- CALLS #4, (R7) ;#4, CONCAT 67 04 FB 0026D
- PUSHL SP ;SP 0843 5E DD 00270
- PUSHAB 8(SP) ;POINTER 08 AE 9F 00272
- PUSHL (R9) ;GEN_1SIZE 69 DD 00275
- PUSHL R10 ;R10 5A DD 00277
- CALLS #4, (R7) ;#4, CONCAT 67 04 FB 00279
- PUSHL SP ;SP 0844 5E DD 0027C
- PUSHAB 8(SP) ;POINTER 08 AE 9F 0027E
- PUSHL #1 ;#1 01 DD 00281
- PUSHAB 48(R11) ;P.AAG 30 AB 9F 00283
- BRW 25$ ;25$ 008A 31 00286
- 21$: PUSHL SP ;SP 0854 5E DD 00289
- PUSHAB 8(SP) ;POINTER 08 AE 9F 0028B
- MOVZWL G^GEN_SEND_CMD, -(SP) ;GEN_SEND_CMD, -(SP) 7E 00000000G 00 3C 0028E
- PUSHL G^GEN_SEND_CMD+4 ;GEN_SEND_CMD+4 00000000G 00 DD 00295
- CALLS #4, (R7) ;#4, CONCAT 67 04 FB 0029B
- PUSHL SP ;SP 0855 5E DD 0029E
- PUSHAB 8(SP) ;POINTER 08 AE 9F 002A0
- PUSHL (R9) ;GEN_1SIZE 69 DD 002A3
- PUSHL R10 ;R10 5A DD 002A5
- CALLS #4, (R7) ;#4, CONCAT 67 04 FB 002A7
- PUSHL SP ;SP 0856 5E DD 002AA
- PUSHAB 8(SP) ;POINTER 08 AE 9F 002AC
- PUSHL #2 ;#2 02 DD 002AF
- PUSHAB 52(R11) ;P.AAH 34 AB 9F 002B1
- CALLS #4, (R7) ;#4, CONCAT 67 04 FB 002B4
- PUSHL SP ;SP 0857 5E DD 002B7
- PUSHAB 8(SP) ;POINTER 08 AE 9F 002B9
- PUSHL G^GEN_2SIZE ;GEN_2SIZE 00000000G 00 DD 002BC
- PUSHAB G^GEN_2DATA ;GEN_2DATA 00000000G 00 9F 002C2
- CALLS #4, (R7) ;#4, CONCAT 67 04 FB 002C8
- PUSHL SP ;SP 0858 5E DD 002CB
- PUSHAB 8(SP) ;POINTER 08 AE 9F 002CD
- PUSHL #1 ;#1 01 DD 002D0
- PUSHAB 56(R11) ;P.AAI 38 AB 9F 002D2
- BRB 27$ ;27$ 5B 11 002D5
- 22$: MOVL (R9), R6 ;GEN_1SIZE, R6 0867 56 69 D0 002D7
- MOVC5 R6, (R10), #0, #132, G^FILE_NAME ;R6, GEN_1DATA, #0, #132, FILE_NAME 6A 56 2C 002DA
- ; 0084 8F 00 002DD
- ; 00000000G 00 002E1
- MOVL R6, G^FILE_SIZE ;R6, FILE_SIZE 0868 00000000G 00 56 D0 002E6
- 23$: MOVL #134316043, R0 ;#134316043, R0 0869 50 0801800B 8F D0 002ED
- RET ; 04 002F4
- 24$: PUSHL SP ;SP 0878 5E DD 002F5
- PUSHAB 8(SP) ;POINTER 08 AE 9F 002F7
- MOVZWL G^GEN_WHO_CMD, -(SP) ;GEN_WHO_CMD, -(SP) 7E 00000000G 00 3C 002FA
- PUSHL G^GEN_WHO_CMD+4 ;GEN_WHO_CMD+4 00000000G 00 DD 00301
- CALLS #4, (R7) ;#4, CONCAT 67 04 FB 00307
- PUSHL SP ;SP 0879 5E DD 0030A
- PUSHAB 8(SP) ;POINTER 08 AE 9F 0030C
- PUSHL (R9) ;GEN_1SIZE 69 DD 0030F
- PUSHL R10 ;R10 5A DD 00311
- 25$: CALLS #4, (R7) ;#4, CONCAT 67 04 FB 00313
- PUSHL SP ;SP 0880 5E DD 00316
- PUSHAB 8(SP) ;POINTER 08 AE 9F 00318
- PUSHL G^GEN_2SIZE ;GEN_2SIZE 00000000G 00 DD 0031B
- PUSHAB G^GEN_2DATA ;GEN_2DATA 00000000G 00 9F 00321
- BRB 27$ ;27$ 09 11 00327
- 26$: PUSHL SP ;SP 0885 5E DD 00329
- PUSHAB 8(SP) ;POINTER 08 AE 9F 0032B
- PUSHL (R9) ;GEN_1SIZE 69 DD 0032E
- PUSHL R10 ;R10 5A DD 00330
- 27$: CALLS #4, (R7) ;#4, CONCAT 67 04 FB 00332
- MOVW (SP), -24(FP) ;COMMAND_LENGTH, COMMAND_DESC 0899 E8 AD 6E B0 00335
- MOVL #51970052, -16(FP) ;#51970052, ITMLST 0900 F0 AD 03190004 8F D0 00339
- MOVAB 8(SP), -12(FP) ;OUR_PID, ITMLST+4 0901 F4 AD 08 AE 9E 00341
- MOVAB -8(FP), -8(FP) ;ITMLST+8, ITMLST+8 0902 F8 AD F8 AD 9E 00346
- CLRL -4(FP) ;ITMLST+12 0903 FC AD D4 0034B
- CLRQ -(SP) ;-(SP) 0904 7E 7C 0034E
- CLRL -(SP) ;-(SP) 7E D4 00350
- PUSHAB -16(FP) ;ITMLST F0 AD 9F 00352
- CLRQ -(SP) ;-(SP) 7E 7C 00355
- CLRL -(SP) ;-(SP) 7E D4 00357
- CALLS #7, G^SYS$GETJPI ;#7, SYS$GETJPI 00000000G 00 07 FB 00359
- MOVC5 #11, 60(R11), #0, #20, 468(SP) ;#11, P.AAJ, #0, #20, MBX_NAME 0906 3C AB 0B 2C 00360
- ; 14 00 00364
- ; 01D4 CE 00366
- MOVL #17694728, 488(SP) ;#17694728, MBX_DESC 0909 01E8 CE 010E0008 8F D0 00369
- MOVAB 479(SP), 492(SP) ;MBX_NAME+11, MBX_DESC+4 0910 01EC CE 01DF CE 9E 00372
- PUSHL #8 ;#8 0911 08 DD 00379
- PUSHAB 492(SP) ;MBX_DESC 01EC CE 9F 0037B
- PUSHAB 16(SP) ;OUR_PID 10 AE 9F 0037F
- CALLS #3, G^OTS$CVT_L_TZ ;#3, OTS$CVT_L_TZ 00000000G 00 03 FB 00382
- MOVW #19, 488(SP) ;#19, MBX_DESC 0912 01E8 CE 13 B0 00389
- MOVAB 468(SP), 492(SP) ;MBX_NAME, MBX_DESC+4 0913 01EC CE 01D4 CE 9E 0038E
- PUSHAB 488(SP) ;MBX_DESC 0914 01E8 CE 9F 00395
- CLRQ -(SP) ;-(SP) 7E 7C 00399
- CLRQ -(SP) ;-(SP) 7E 7C 0039B
- PUSHAB 32(SP) ;MBX_CHAN 20 AE 9F 0039D
- CLRL -(SP) ;-(SP) 7E D4 003A0
- CALLS #7, G^SYS$CREMBX ;#7, SYS$CREMBX 00000000G 00 07 FB 003A2
- MOVL R0, R6 ;R0, STATUS 56 50 D0 003A9
- BLBC R6, 32$ ;STATUS, 32$ 0916 63 56 E9 003AC
- MOVB #58, 487(SP) ;#58, MBX_NAME+19 0923 01E7 CE 3A 90 003AF
- MOVW #20, 488(SP) ;#20, MBX_DESC 0924 01E8 CE 14 B0 003B4
- MOVC5 #19, 468(SP), #0, #132, - ;#19, MBX_NAME, #0, #132, FILE_NAME 0925 01D4 CE 13 2C 003B9
- G^FILE_NAME ; 0084 8F 00 003BE
- ; 00000000G 00 003C2
- MOVL #19, G^FILE_SIZE ;#19, FILE_SIZE 0926 00000000G 00 13 D0 003C7
- MOVL #1, 16(SP) ;#1, FLAGS 0927 10 AE 01 D0 003CE
- PUSHL 12(SP) ;MBX_CHAN 0946 0C AE DD 003D2
- CLRL R1 ;R1 0941 51 D4 003D5
- CMPL -2296(R8), #3 ;VMS_VERSION, #3 03 F708 C8 D1 003D7
- BGTR 28$ ;28$ 0A 14 003DC
- INCL R1 ;R1 51 D6 003DE
- MOVAB -26(R7), R0 ;PROCESS_COMPLETION_AST, R0 0943 50 E6 A7 9E 003E0
- PUSHL R0 ;R0 50 DD 003E4
- BRB 29$ ;29$ 02 11 003E6
- 28$: CLRL -(SP) ;-(SP) 0945 7E D4 003E8
- 29$: CLRQ -(SP) ;-(SP) 0939 7E 7C 003EA
- CLRQ -(SP) ;-(SP) 0937 7E 7C 003EC
- PUSHAB 40(SP) ;FLAGS 0936 28 AE 9F 003EE
- PUSHAB 516(SP) ;MBX_DESC 0935 0204 CE 9F 003F1
- BLBC R1, 30$ ;R1, 30$ 0930 04 51 E9 003F5
- CLRL -(SP) ;-(SP) 0932 7E D4 003F8
- BRB 31$ ;31$ 06 11 003FA
- 30$: MOVAB 80(R11), R0 ;P.AAK, R0 0934 50 50 AB 9E 003FC
- PUSHL R0 ;R0 50 DD 00400
- 31$: PUSHAB -24(FP) ;COMMAND_DESC 0929 E8 AD 9F 00402
- CALLS #10, G^LIB$SPAWN ;#10, LIB$SPAWN 00000000G 00 0A FB 00405
- MOVL R0, R6 ;R0, STATUS 56 50 D0 0040C
- BLBS R6, 33$ ;STATUS, 33$ 0948 09 56 E8 0040F
- 32$: PUSHL R6 ;STATUS 56 DD 00412
- CALLS #1, G^LIB$SIGNAL ;#1, LIB$SIGNAL 00000000G 00 01 FB 00414
- 33$: MOVL R6, R0 ;STATUS, R0 0950 50 56 D0 0041B
- RET ; 04 0041E
-
- ; Routine Size: 1055 bytes, Routine Base: $CODE$ + 0131
-
-
- ; 0952 1
- ; 0953 1 %SBTTL 'SY_DISMISS - Sleep for N seconds'
- ; 0954 1
- ; 0955 1 GLOBAL ROUTINE SY_DISMISS (SECONDS) : NOVALUE =
- ; 0956 1
- ; 0957 1 !++
- ; 0958 1 ! FUNCTIONAL DESCRIPTION:
- ; 0959 1 !
- ; 0960 1 ! This routine is called to cause KERMIT to sleep for the
- ; 0961 1 ! specified number of seconds.
- ; 0962 1 !
- ; 0963 1 ! CALLING SEQUENCE:
- ; 0964 1 !
- ; 0965 1 ! SY_DISMISS(Number of seconds);
- ; 0966 1 !
- ; 0967 1 ! INPUT PARAMETERS:
- ; 0968 1 !
- ; 0969 1 ! Number of seconds to sleep.
- ; 0970 1 !
- ; 0971 1 ! IMPLICIT INPUTS:
- ; 0972 1 !
- ; 0973 1 ! None.
- ; 0974 1 !
- ; 0975 1 ! OUTPUT PARAMETERS:
- ; 0976 1 !
- ; 0977 1 ! None.
- ; 0978 1 !
- ; 0979 1 ! IMPLICIT OUTPUTS:
- ; 0980 1 !
- ; 0981 1 ! None.
- ; 0982 1 !
- ; 0983 1 ! COMPLETION CODES:
- ; 0984 1 !
- ; 0985 1 ! None.
- ; 0986 1 !
- ; 0987 1 ! SIDE EFFECTS:
- ; 0988 1 !
- ; 0989 1 ! None.
- ; 0990 1 !
- ; 0991 1 !--
- ; 0992 1
- ; 0993 2 BEGIN
- ; 0994 2
- ; 0995 2 LOCAL
- ; 0996 2 STATUS,
- ; 0997 2 TOTAL_TIME : VECTOR [2, LONG]; ! Quad word for length of time to sleep
- ; 0998 2
- ; 0999 2 IF .SECONDS EQL 0 THEN RETURN KER_NORMAL;
- ; 1000 2
- ; 1001 2 TOTAL_TIME [0] = -.SECONDS*10*1000*1000;
- ; 1002 2 TOTAL_TIME [1] = -1;
- ; 1003 2 STATUS = $SETIMR (EFN = 1, DAYTIM = TOTAL_TIME);
- ; 1004 2
- ; 1005 2 IF NOT .STATUS THEN LIB$SIGNAL (.STATUS);
- ; 1006 2
- ; 1007 2 STATUS = $WAITFR (EFN = 1);
- ; 1008 2
- ; 1009 2 IF NOT .STATUS THEN LIB$SIGNAL (.STATUS);
- ; 1010 2
- ; 1011 1 END; ! End of SY_DISMISS(time)
-
-
-
- .EXTRN SYS$SETIMR
-
- .ENTRY SY_DISMISS, ^M<R2,R3> ;SY_DISMISS, Save R2,R3 0955 000C 00000
- MOVAB G^LIB$SIGNAL, R3 ;LIB$SIGNAL, R3 53 00000000G 00 9E 00002
- SUBL2 #8, SP ;#8, SP 5E 08 C2 00009
- TSTL 4(AP) ;SECONDS 0999 04 AC D5 0000C
- BEQL 2$ ;2$ 3F 13 0000F
- MULL3 #10000000, 4(AP), R0 ;#10000000, SECONDS, R0 1001 04 AC 00989680 8F C5 00011
- ; 50 00019
- MNEGL R0, (SP) ;R0, TOTAL_TIME 6E 50 CE 0001A
- MNEGL #1, 4(SP) ;#1, TOTAL_TIME+4 1002 04 AE 01 CE 0001D
- CLRQ -(SP) ;-(SP) 1003 7E 7C 00021
- CLRL -(SP) ;-(SP) 7E D4 00023
- PUSHAB 12(SP) ;TOTAL_TIME 0C AE 9F 00025
- PUSHL #1 ;#1 01 DD 00028
- CALLS #5, G^SYS$SETIMR ;#5, SYS$SETIMR 00000000G 00 05 FB 0002A
- MOVL R0, R2 ;R0, STATUS 52 50 D0 00031
- BLBS R2, 1$ ;STATUS, 1$ 1005 05 52 E8 00034
- PUSHL R2 ;STATUS 52 DD 00037
- CALLS #1, (R3) ;#1, LIB$SIGNAL 63 01 FB 00039
- 1$: PUSHL #1 ;#1 1007 01 DD 0003C
- CALLS #1, G^SYS$WAITFR ;#1, SYS$WAITFR 00000000G 00 01 FB 0003E
- MOVL R0, R2 ;R0, STATUS 52 50 D0 00045
- BLBS R2, 2$ ;STATUS, 2$ 1009 05 52 E8 00048
- PUSHL R2 ;STATUS 52 DD 0004B
- CALLS #1, (R3) ;#1, LIB$SIGNAL 63 01 FB 0004D
- 2$: RET ; 1011 04 00050
-
- ; Routine Size: 81 bytes, Routine Base: $CODE$ + 0550
-
-
- ; 1012 1
- ; 1013 1 %SBTTL 'SY_TIME - Return abbreviated system time'
- ; 1014 1
- ; 1015 1 GLOBAL ROUTINE SY_TIME =
- ; 1016 1
- ; 1017 1 !++
- ; 1018 1 ! FUNCTIONAL DESCRIPTION:
- ; 1019 1 !
- ; 1020 1 ! This routine will return the system time to the calling routine.
- ; 1021 1 ! This will allow for the calculation of the effective baud rate.
- ; 1022 1 !
- ; 1023 1 ! CALLING SEQUENCE:
- ; 1024 1 !
- ; 1025 1 ! TIME = SY_TIME ();
- ; 1026 1 !
- ; 1027 1 ! INPUT PARAMETERS:
- ; 1028 1 !
- ; 1029 1 ! None.
- ; 1030 1 !
- ; 1031 1 ! IMPLICIT INPUTS:
- ; 1032 1 !
- ; 1033 1 ! None.
- ; 1034 1 !
- ; 1035 1 ! OUTPUT PARAMETERS:
- ; 1036 1 !
- ; 1037 1 ! Time in milliseconds.
- ; 1038 1 !
- ; 1039 1 ! IMPLICIT OUTPUTS:
- ; 1040 1 !
- ; 1041 1 ! None.
- ; 1042 1 !
- ; 1043 1 ! COMPLETION CODES:
- ; 1044 1 !
- ; 1045 1 ! None.
- ; 1046 1 !
- ; 1047 1 ! SIDE EFFECTS:
- ; 1048 1 !
- ; 1049 1 ! None.
- ; 1050 1 !
- ; 1051 1 !--
- ; 1052 1
- ; 1053 2 BEGIN
- ; 1054 2 !
- ; 1055 2 ! Local storage
- ; 1056 2 !
- ; 1057 2
- ; 1058 2 LOCAL
- ; 1059 2 Adjusted_Time : VECTOR [2, LONG], ! System time - a constant.
- ; 1060 2 MILLI_SECONDS, ! Time in milliseconds
- ; 1061 2 REMAINDER, ! Remainder on EDIV
- ; 1062 2 STATUS, ! Status returned by lower level
- ; 1063 2 Time : VECTOR [2, LONG], ! Quadword to hold system time.
- ; 1064 2 TEN_FOURTH : VECTOR [2, LONG]; ! to hold 10**4
- ; 1065 2
- ; 1066 2 !
- ; 1067 2 ! LIB$EDIV will fail if the system time is too large, so we need
- ; 1068 2 ! to subtract some large constant from it - might as well use
- ; 1069 2 ! the current time.
- ; 1070 2 !
- ; 1071 2
- ; 1072 2 IF .Subtrahend [0] EQL 0 AND .Subtrahend [1] EQL 0
- ; 1073 2 THEN
- ; 1074 3 BEGIN
- ; 1075 3 STATUS = SYS$GETTIM(Subtrahend);
- ; 1076 3 IF NOT .STATUS THEN RETURN 0;
- ; 1077 2 END;
- ; 1078 2 !
- ; 1079 2 ! Get the VMS system time.
- ; 1080 2 !
- ; 1081 2 STATUS = SYS$GETTIM(Time);
- ; 1082 2 IF NOT .STATUS THEN RETURN 0;
- ; 1083 2
- ; 1084 2 !
- ; 1085 2 ! Compute the longword value from the quadword returned.
- ; 1086 2 !
- ; 1087 2 Status = LIB$SUBX(Time, Subtrahend, Adjusted_Time);
- ; 1088 2 IF NOT .STATUS THEN RETURN 0;
- ; 1089 2
- ; 1090 2 TEN_FOURTH [0] = 1000*10;
- ; 1091 2 TEN_FOURTH [1] = 0;
- ; 1092 2 STATUS = LIB$EDIV (TEN_FOURTH, Adjusted_Time, MILLI_SECONDS, REMAINDER);
- ; 1093 2
- ; 1094 2 IF NOT .STATUS AND .Status NEQ SS$_INTOVF THEN RETURN 0;
- ; 1095 2
- ; 1096 2 RETURN .MILLI_SECONDS;
- ; 1097 1 END; ! End of SY_TIME
-
-
-
-
-
- .ENTRY SY_TIME, ^M<R2,R3> ;SY_TIME, Save R2,R3 1015 000C 00000
- MOVAB G^SYS$GETTIM, R3 ;SYS$GETTIM, R3 53 00000000G 00 9E 00002
- MOVAB G^U.6, R2 ;U.6, R2 52 00000000' 00 9E 00009
- SUBL2 #32, SP ;#32, SP 5E 20 C2 00010
- TSTL (R2) ;SUBTRAHEND 1072 62 D5 00013
- BNEQ 1$ ;1$ 0D 12 00015
- TSTL 4(R2) ;SUBTRAHEND+4 04 A2 D5 00017
- BNEQ 1$ ;1$ 08 12 0001A
- PUSHL R2 ;R2 1075 52 DD 0001C
- CALLS #1, (R3) ;#1, SYS$GETTIM 63 01 FB 0001E
- BLBC R0, 3$ ;STATUS, 3$ 1076 47 50 E9 00021
- 1$: PUSHAB 16(SP) ;TIME 1081 10 AE 9F 00024
- CALLS #1, (R3) ;#1, SYS$GETTIM 63 01 FB 00027
- BLBC R0, 3$ ;STATUS, 3$ 1082 3E 50 E9 0002A
- PUSHAB 24(SP) ;ADJUSTED_TIME 1087 18 AE 9F 0002D
- PUSHL R2 ;R2 52 DD 00030
- PUSHAB 24(SP) ;TIME 18 AE 9F 00032
- CALLS #3, G^LIB$SUBX ;#3, LIB$SUBX 00000000G 00 03 FB 00035
- BLBC R0, 3$ ;STATUS, 3$ 1088 2C 50 E9 0003C
- MOVZWL #10000, 8(SP) ;#10000, TEN_FOURTH 1090 08 AE 2710 8F 3C 0003F
- CLRL 12(SP) ;TEN_FOURTH+4 1091 0C AE D4 00045
- PUSHL SP ;SP 1092 5E DD 00048
- PUSHAB 8(SP) ;MILLI_SECONDS 08 AE 9F 0004A
- PUSHAB 32(SP) ;ADJUSTED_TIME 20 AE 9F 0004D
- PUSHAB 20(SP) ;TEN_FOURTH 14 AE 9F 00050
- CALLS #4, G^LIB$EDIV ;#4, LIB$EDIV 00000000G 00 04 FB 00053
- BLBS R0, 2$ ;STATUS, 2$ 1094 09 50 E8 0005A
- CMPL R0, #1148 ;STATUS, #1148 0000047C 8F 50 D1 0005D
- BNEQ 3$ ;3$ 05 12 00064
- 2$: MOVL 4(SP), R0 ;MILLI_SECONDS, R0 1096 50 04 AE D0 00066
- RET ; 04 0006A
- 3$: CLRL R0 ;R0 50 D4 0006B
- RET ; 04 0006D
-
- ; Routine Size: 110 bytes, Routine Base: $CODE$ + 05A1
-
-
- ; 1098 1
- ; 1099 1 %SBTTL 'End of KERSYS.BLI'
- ; 1100 1 END ! End of module
- ; 1101 1
- ; 1102 0 ELUDOM
-
-
-
-
-
-
- ; PSECT SUMMARY
- ;
- ; Name Bytes Attributes
- ;
- ; $OWN$ 2300 NOVEC, WRT, RD ,NOEXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2)
- ; $PLIT$ 104 NOVEC,NOWRT, RD ,NOEXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2)
- ; $CODE$ 1551 NOVEC,NOWRT, RD , EXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2)
- ; . ABS . 0 NOVEC,NOWRT,NORD ,NOEXE,NOSHR, LCL, ABS, CON,NOPIC,ALIGN(0)
-
-
-
-
- ; Library Statistics
- ;
- ; -------- Symbols -------- Pages Processing
- ; File Total Loaded Percent Mapped Time
- ;
- ; SYS$COMMON:[SYSLIB]STARLET.L32;4 15754 86 0 919 00:00.4
- ; SYS$COMMON:[SYSLIB]TPAMAC.L32;4 43 0 0 15 00:00.1
-
-
-
-
-
-
-
- ; COMMAND QUALIFIERS
-
- ; BLI/LIS/MAC=(ASSEM,UNIQ)/SOUR:NOHEAD VMSSYS
-
- ; Compilation Complete
-
- .END
-